package classandobj.innerclass.tij;


public class InnerClassTest {
	
	public void innerFoo(){
		System.out.println("This is InnerClassTest's innnerFoo()");
	}
	
	public InnerClassTest foo(final String finalStr4InnerClass){
		class InnerClass extends InnerClassTest{
			public void innerFoo(){
				System.out.println(finalStr4InnerClass);
			}
		};
		
		return new InnerClass();
	}
	
	public static void main(String[] args){
		InnerClassTest inner = new InnerClassTest();
		
		InnerClassTest innerFromInnerClass = inner.foo("xxx");
		// 按常规，至此“xxx”已经不在了
		// 但是执行以下方法，你会发现输出的仍然是“xxx”。
		// 实际上，InnerClass在其内部维护了 “xxx”的一个副本。
		// 为了不让该副本被改变而维护其一致性，副本本身也被声明为final型
		innerFromInnerClass.innerFoo();
	}
}
